<?php
function azioneSincro() {
	global $objDB;
	$msg = "";
	$sSql = "SELECT m.* FROM wfm_moduli m WHERE m.id_modulo = ".reqVarInt('id');
	$objDB->exec($sSql);
	if (!$aRecMod = $objDB->fetch()) {
		return "id.'".reqVar('id')."' errato<br>";
	}
	$codModulo = $aRecMod['cod_modulo'];
	$aCampiFix = array();
	$aDefCampi = unserialize($aRecMod['def_campi']);
	include OVF_FS_WEB_ROOT."/app/wfma/_inc/inc.aCampiFix.php";
	$aDefCampiAll = array_merge($aCampiFix,$aDefCampi);
	$sSql = "SHOW TABLES LIKE 'wfm_rec_$codModulo'";
	$objDB->exec($sSql);
	if (!$aRecTab = $objDB->fetch()) {
		$msg .= azioneSincroCrea($codModulo,$aDefCampiAll);
	} else {
		$msg .= azioneSincroAggiorna($codModulo,$aDefCampiAll);
	}
	$sSql = "SHOW TABLES LIKE 'wfm_{$codModulo}_log'";
	$objDB->exec($sSql);
	if (!$aRecTab = $objDB->fetch()) {
		$msg .= azioneSincroCreaLog($codModulo,$aDefCampiAll);
	} else {
		$msg .= azioneSincroAggiornaLog($codModulo,$aDefCampiAll);
	}
		$sSql = "UPDATE wfm_moduli SET def_campi_inst = def_campi WHERE id_modulo = ".reqVarInt('id');
	$objDB->exec($sSql);
	return $msg;
}

function azioneSincroCrea($codModulo,$aDefCampi) {
	global $objDB;
	$msg = "*** creazione tabella effettuata ***<br>";
	$sSql = "CREATE TABLE wfm_rec_$codModulo (id_rec INT(11) NOT NULL AUTO_INCREMENT";
	$sSql .= campiSincroCrea($aDefCampi);
	$sSql .= ", PRIMARY KEY (id_rec))";
	$objDB->exec($sSql);
	dbg_($sSql);
	return $msg;
}
	
function azioneSincroCreaLog($codModulo,$aDefCampi) {
	global $objDB;
	$sSql = "CREATE TABLE wfm_rec_{$codModulo}_log (id_log INT(11) NOT NULL AUTO_INCREMENT";
	$sSql .= ", id_rec INT(11) NOT NULL";
	$sSql .= campiSincroCrea($aDefCampi);
	$sSql .= ", PRIMARY KEY (id_log),  KEY id_rec (id_rec))";
	$objDB->exec($sSql);
	dbg_($sSql);
	return $msg;
}

function campiSincroCrea($aDefCampi) {
	$aTipiCampo = array();
	require OVF_FS_WEB_ROOT."/app/wfma/_inc/inc.aTipiCampo.php";
	$sSql = "";
	foreach($aDefCampi as $sNome => $aDef) {
		if (!isset($aTipiCampo[$aDef['tip']])
		|| $sNome == 'id_rec') {
			continue;
		}
		$aTCX = $aTipiCampo[$aDef['tip']];
		switch ($aTCX['1']) {
			case 'an';
				if ($aTCX[2]=='n') {
					$sType = $aTCX[0];
				} elseif ($aTCX[2]=='x') {
					$sType = $aTCX[0]."(".$aDef['lun'].")";
				} else {
					$sType = $aTCX[0]."(".$aTCX[2].")";
				}
				$sSql .= ", $sNome $sType NOT NULL DEFAULT '".addslashes($aDef['def'])."'";
				break;
			case 'nf';
				if ($aDef['def']=='') $aDef['def'] = '0';
				if ($aTCX[2]=='x') {
					$sType = $aTCX[0]."(".$aDef['lun'].",".$aDef['dec'].")";
				} else {
					$sType = $aTCX[0]."(".$aTCX[2].",".$aTCX[3].")";
				}
				$sSql .= ", $sNome $sType NOT NULL DEFAULT ".floatval($aDef['def']);
				break;
			case 'ni';
				if ($aDef['def']=='') $aDef['def'] = '0';
				$sType = "int(11)";
				$sSql .= ", $sNome $sType NOT NULL DEFAULT ".intval($aDef['def']);
				break;
			case 'da';
				$sType = $aTCX[0];
				if ($aDef['def']=='') $aDef['def'] = '0000-00-00';
				$sSql .= ", $sNome $sType NOT NULL DEFAULT '".addslashes($aDef['def'])."'";
				break;
			case 'do';
				$sType = $aTCX[0];
				if ($aDef['def']=='') $aDef['def'] = '0000-00-00 00:00:00';
				$sSql .= ", $sNome $sType NOT NULL DEFAULT '".addslashes($aDef['def'])."'";
				break;
			default:
				break;
		}		
	}
	return $sSql;
}

function azioneSincroAggiorna($codModulo,$aDefCampi) {
	global $objDB;
	$tabName = "wfm_rec_{$codModulo}";
	$sSql = "SHOW COLUMNS FROM $tabName ";
	$objDB->exec($sSql,'showCol');
	while($aC = $objDB->fetch('showCol')) {
		$aCDB[$aC['Field']] = $aC;
	}
	$msg = campiSincroAggiorna($codModulo,$aDefCampi);
	$msg .= "*** sincronizzazione campi effettuata***<br>";	
	return $msg;
}
	
function azioneSincroAggiornaLog($tabName,$aDefCampi) {
	global $objDB;
	$tabName = "wfm_rec_{$codModulo}_log";
	$sSql = "SHOW COLUMNS FROM $tabName";
	$objDB->exec($sSql,'showCol');
	while($aC = $objDB->fetch('showCol')) {
		$aCDB[$aC['Field']] = $aC;
	}
	$msg = campiSincroAggiorna($tabName,$aDefCampi);
	$msg .= "*** sincronizzazione campi effettuata***<br>";	
	return $msg;
}
	
function campiSincroAggiorna($tabName,$aDefCampi) {
	global $objDB;
	$aTipiCampo = array();
	require OVF_FS_WEB_ROOT."/app/wfma/_inc/inc.aTipiCampo.php";
	$sSql = '';
	foreach($aDefCampi as $sNome => $aDef) {
		if (!isset($aTipiCampo[$aDef['tip']])
		|| $sNome == 'id_rec') {
			continue;
		}
		$aTCX = $aTipiCampo[$aDef['tip']];
		switch ($aTCX[1]) {
			case 'an';
				if ($aTCX[2]=='n') {
					$sType = $aTCX[0];
				} elseif ($aTCX[2]=='x') {
					$sType = $aTCX[0]."(".$aDef['lun'].")";
				} else {
					$sType = $aTCX[0]."(".$aTCX[2].")";
				}
				if (!isset($aCDB[$sNome])) {
					$sSql = "ALTER TABLE $tabName ADD ".$sNome
						." $sType NOT NULL DEFAULT '".addslashes($aDef['def'])."'";
					$objDB->exec($sSql);
					dbg_($sSql);
					break;
				}
				$sDef = $aDef['def'];
				if ($sType == $aCDB[$sNome]['Type'] && trim($sDef) == trim($aCDB[$sNome]['Default'])) {
					break;
				}
				$sSql = "ALTER TABLE $tabName MODIFY ".$sNome
					." $sType NOT NULL DEFAULT '".addslashes($aDef['def'])."'";
				$objDB->exec($sSql);
				dbg_($sSql);
				break;
			case 'nf';
				if ($aDef['def']=='') $aDef['def'] = '0';
				if ($aTCX[2]=='x') {
					$sType = $aTCX[0]."(".$aDef['lun'].",".$aDef['dec'].")";
				} else {
					$sType = $aTCX[0]."(".$aTCX[2].",".$aTCX[3].")";
				}
				if (!isset($aCDB[$sNome])) {
					$sSql = "ALTER TABLE $tabName ADD ".$sNome
						." $sType NOT NULL DEFAULT ".floatval($aDef['def']);
					$objDB->exec($sSql);
					dbg_($sSql);
					break;
				}
				$sDef = $aDef['def'];
				if ($sType == $aCDB[$sNome]['Type'] && floatval($sDef) == floatval($aCDB[$sNome]['Default'])) {
					break;
				}
				$sSql = "ALTER TABLE $tabName MODIFY ".$sNome
					." $sType NOT NULL DEFAULT ".floatval($aDef['def']);
				$objDB->exec($sSql);
				dbg_($sSql);
				break;
			case 'ni';
				if ($aDef['def']=='') $aDef['def'] = '0';
				$sType = "int(11)";
				if (!isset($aCDB[$sNome])) {
					$sSql = "ALTER TABLE $tabName ADD ".$sNome
						." $sType NOT NULL DEFAULT ".intval($aDef['def']);
					$objDB->exec($sSql);
					dbg_($sSql);
					break;
				}
				$sDef = $aDef['def'];
				if ($sType == $aCDB[$sNome]['Type'] && intval($sDef) == intval($aCDB[$sNome]['Default'])) {
					break;
				}
				$sSql = "ALTER TABLE $tabName MODIFY ".$sNome
					." $sType NOT NULL DEFAULT ".intval($aDef['def']);
				$objDB->exec($sSql);
				dbg_($sSql);
				break;
			case 'da';
				$sType = $aTCX[0];
				if ($aDef['def']=='') $aDef['def'] = '0000-00-00';
				if (!isset($aCDB[$sNome])) {
					$sSql = "ALTER TABLE $tabName ADD ".$sNome
						." $sType NOT NULL DEFAULT '".addslashes($aDef['def'])."'";
					$objDB->exec($sSql);
					dbg_($sSql);
					break;
				}
				$sDef = $aDef['def'];
				if ($sType == $aCDB[$sNome]['Type'] && trim($sDef) == trim($aCDB[$sNome]['Default'])) {
					break;
				}
				$sSql = "ALTER TABLE $tabName MODIFY ".$sNome
					." $sType NOT NULL DEFAULT '".addslashes($aDef['def'])."'";
				$objDB->exec($sSql);
				dbg_($sSql);
				break;
			case 'do';
				$sType = $aTCX[0];
				if ($aDef['def']=='') $aDef['def'] = '0000-00-00 00:00:00';
				if (!isset($aCDB[$sNome])) {
					$sSql = "ALTER TABLE $tabName ADD ".$sNome
						." $sType NOT NULL DEFAULT '".addslashes($aDef['def'])."'";
					$objDB->exec($sSql);
					dbg_($sSql);
					break;
				}
				$sDef = $aDef['def'];
				if ($sType == $aCDB[$sNome]['Type'] && trim($sDef) == trim($aCDB[$sNome]['Default'])) {
					break;
				}
				$sSql = "ALTER TABLE $tabName MODIFY ".$sNome
					." $sType NOT NULL DEFAULT '".addslashes($aDef['def'])."'";
				$objDB->exec($sSql);
				dbg_($sSql);
				break;
			default:
				break;
		}		
	}
	return $msg;
}
